(7/8)Title Screen——启动画面

通常我们在启动一款游戏的时候,首先会进入一个启动的菜单页面,在这里你可以选择开始游戏,或者设置游戏的一些配置,而到目前为止,我们做的这款游戏每次运行都是直接进入游戏画面,因此今天我们就要学习如何去制作这样一个启动页面。
首先我们需要创建两个精灵,第一个精灵是用来在后面平铺绘制页面背景的,第二个精灵则是这个页面的标题元素,如下图

然后我们要来创建这个启动画面,这样一个独立的画面在我们的游戏中也是一个单独的场景,因此我们要新建一个游戏场景(room),在右侧资源树的room选项中右键然后选择“Create”即可,然后我们修改一下名字,这个标题页取名叫“rm_title”,如下图:

新建的场景通常位于场景列表的最下方,而游戏默认开启时会打开列表顶部的场景,因此我们需要调整场景的顺序,否则游戏依然会默认打开我们的游戏场景,调整场景我们只需要在场景上按住鼠标左键直接进行拖放即可,但是要注意,要把场景放到另一个场景的上方或下方,而不要直接拖到场景名称上,那样会使这个场景变为一个子场景。
当调整好顺序以后就可以打开游戏测试一下了,如无意外……应该会看到一个全黑的屏幕orz
因为我们还没有在这个场景中布置任何内容,接下来我们先来给这个场景绘制背景,之前我们曾经在游戏场景中用瓷片功能绘制过背景,而在这个场景中我们会学习使用背景图层(Background Layer),如下图:

当你选中背景图层以后,下方的图层属性就会变成背景图层特有的属性设置,其中第一项可以选择用来作为背景的图片,你可以选择一整张大图,也可以选择一些单元图片然后平铺以完成背景的绘制,我们今天要使用的就是平铺的方法,首先在精灵中选中刚才第一个创建的“spr_darktile”,然后勾选上水平平铺和垂直平铺的选项,我们就会看到这个场景已经被这个图像所画满了,这个有些类似Windows壁纸中的平铺选项,没试过的可以去试试看感受一下,就是在水平和垂直的方向上反复贴这一张图片,直到把整个画面撑满为止。
然后为了让画面显得更有动感,我们还可以设置背景的移动速度,在刚才的属性下方还有水平和垂直方向的速度两个选项,在这里设置不同的数值,就可以让背景图层缓慢移动,并且可以不用编译游戏直接预览,如下图:

在场景编辑器中间主窗口的右上角有一条工具栏,这里的播放按钮点击以后就会播放场景中所有的动画元素,包括带动画效果的精灵都可以直接预览。
现在我们已经有了一个会不停移动的背景,现在需要一个游戏的标题,你应该还记得在之前创建精灵时我们已经创建过一个标题的精灵了,我们希望这个标题能在游戏启动以后慢慢显示出来,那这就需要写一些方法来控制这个过程了。
现在我们来创建一个标题的对象(并且关联之前的标题图精灵),然后增加一个Create事件,并在事件中定义一些基础属性:

如上图,我们写了这样三行代码:

image_alpha = 0 ;
x = room_width/2;
y = room_height/2;

第一行代码是内置的一个属性,就是图片的透明度,我们默认设置为0就代表这个图片是完全透明的,这样玩家就看不到这个标题了,稍后我们要另外再写个方法来使这个透明度慢慢增加,这样用户就会觉得标题是慢慢显示出来的。
下面的x和y两行代码则是指定了这个标题图的为止,我们可以看到这两个值我们没有直接定义,而是取了场景的高和宽的一半,这就意味着它会出现在场景的最中央,这样我们在场景编辑器中无论把这个对象放到什么位置,当游戏开始运行以后,标题都会默认初始化到场景的中央,因为这是在创建对象的同时就已经被定义的事件。
接下来我们要来让标题的透明度逐渐增加,我们需要创建一个step事件,然后填入以下内容:

image_alpha = min(image_alpha + 0.02,1);

这一句就是让透明度逐渐变大的方法,重点在于等号后边的那半段,这个min也是GMS2内置的方法,作用是从给出的参数中找到最小的那个值,这个参数你可以一次给很多数字,这个方法都能找到其中最小的那个值,而这里我们给参数两个值,第一个值是“image_alpha+0.02”,第二个值是“1”,因为透明度最大值只能到1,就是完全不透明,而在create事件中我们给透明度默认的值是0,因此当这个事件第一次被触发时,参数就是“0+0.02”和“1”,自然会取0.02作为值赋予透明度,而这个step事件是随着游戏的画面帧数不停被触发的,因此会使得透明度以0.02的比例不断增加,直到最后超过1,那这个值就永远都会返回1了,这样就完成了图片从完全透明到不透明的一个变化,从而给人从视觉上以慢慢显示出来的效果。
现在预览一下我们能看到如下的画面:

可能GIF图只能看出些微的透明度变化,但却是还是能看出效果的……
那我们最后就要来实现最重要的一个步骤了,就是我们启动到了这个画面以后,我们要怎么开始游戏,在标题中我们写了一行“Press enter to start”就是说我们希望按下键盘上的回车键来开始游戏,那我们现在就需要绑定一个事件,这个事件是当我们按下回车键以后触发的,所要触发的动作则是开始游戏,就是跳转到我们之前的游戏场景了,那我们在这个标题对象上继续增加一个新的事件——按键事件:

在事件列表中我们可以找到这样一个事件,我们用的是“key up”事件,就是指当按键被松开时才会触发,这里我们选择我们要的回车键——Enter,然后再事件中写入以下内容:

这里我们示范了两个跳转方法,第一个方法是:

room_goto_next();

这句的意思就是,打开下一个场景,就是说从场景列表中寻找当前场景的下一个场景,然后直接跳转过去,在我们这个游戏中,目前只有两个场景,因此使用这个方法也是可以的。
而第二个方法是:

room_goto(rm_game);

这个方法的意思是我要指定跳到叫“rm_game”这个名字的场景中去,当你的游戏中的场景非常多,跳转关系非常复杂时,就需要用到这种指定跳转的方法了……不过今天的游戏中我们只要用第一个方法也能达到目的。
然后按照你的喜好选择以上两个方法中的任意一个,再打开游戏测试就会发现已经可以按下回车来开始游戏了,一切正常,本节课也就到此结束:)

2017-05-25 00:27
Comments
Write a Comment